package com.weixin.util;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import com.weixin.beaninfo.LocationMSG;
import com.weixin.beaninfo.Place;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * 该类主要为解析JSON数据
 * @author 海松
 *
 */
public class JSONUtils {
	/**
	 * 根据参数jsondata中的key=result数据，得到LocationMSG对象
	 * @param jsondata 封装了地图数据的JSON对象
	 * @return
	 */
	public static List<Object> getLocationByPlace(JSONObject jsondata,String className){
		List<Object> locationlist=new ArrayList<Object>();
		Class clazz=null;
		try {
			clazz=Class.forName(className);
			Field[] fields=clazz.getDeclaredFields();
			//将该实体类所有字段遍历一遍，并存储在list中
			List<String> fieldList=new ArrayList<String>();
			for (Field field : fields) {
				fieldList.add(field.getName());
			}
			JSONArray array=jsondata.getJSONArray("results");
			for(int i=0;i<array.size();i++){
				JSONObject json=JSONObject.fromObject(array.get(i));
				Object instance=clazz.newInstance();
				instance=getObject(json,fieldList,instance);
				locationlist.add(instance);
			}
		} catch (Exception e) {
			System.out.println("getLocationByPlace:根据类名或者实例化出错");
			e.printStackTrace();
		}
		return locationlist;
	}
	/**
	 * 将jsondata字符串数据转化为Place对象
	 * @param jsondata
	 * @return
	 * @throws ClassNotFoundException 
	 */
	static Object getObject(JSONObject jsondata,List<String> fieldList,Object obj) {
		//如果数据为空，则返回null
		if(jsondata.equals("")){
			System.out.println("asdasdasd");
			return null;
		}
		Class clazz=obj.getClass();
		for(int i=0;i<fieldList.size();i++){
			String fieldName=fieldList.get(i);
			Object value=jsondata.get(fieldName);
			try{
				PropertyDescriptor pd=new PropertyDescriptor(fieldName, clazz);
				Method method=pd.getWriteMethod();
				//添加横纵坐标
				//将jsondata里面的数据封装在对象中
				if(value!=null){
					if(fieldName.equals("location")){
						JSONObject json=JSONObject.fromObject(jsondata.get("location"));
						String location=json.getString("lng")+","+json.getString("lat");
						Object result=method.invoke(obj, location);
					}
					else{
						String fieldValue=String.valueOf(value);
						method.invoke(obj, fieldValue);
					}
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return obj;
	}
}
